#version 100

// 使用 attribute 关键字声明输入变量
attribute vec3 aPos;
attribute vec3 aNormVec;
attribute vec4 aColor;

// uniform 变量声明保持不变
uniform mat3 normModelMatrix;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;

// 使用 varying 关键字声明输出变量
varying vec3 vertexColor;
varying vec3 Norm;
varying vec3 FragPos;

void main()
{
    // 计算顶点在裁剪空间的位置
    gl_Position = projection * view * model * vec4(aPos, 1.0);
    // 传递顶点颜色
    vertexColor = vec3(aColor);
    // 将法向量变换到世界空间
    Norm = normModelMatrix * aNormVec;
    // 计算顶点在世界空间的位置
    FragPos = vec3(model * vec4(aPos, 1.0));
}
